lexer = $lexer; } public function create(string $content) : BetterTokenIterator { $tokens = $this->lexer->tokenize($content); return new BetterTokenIterator($tokens); } public function createFromTokenIterator(TokenIterator $tokenIterator) : BetterTokenIterator { if ($tokenIterator instanceof BetterTokenIterator) { return $tokenIterator; } // keep original tokens and index position $tokens = $tokenIterator->getTokens(); $currentIndex = $tokenIterator->currentTokenIndex(); return new BetterTokenIterator($tokens, $currentIndex); } }